<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Order extends MY_Controller {

    private $_user_id = 0;
    private $data = array();
    
    public function __construct() {
        parent:: __construct();
        if(!$this->logged_in()) {
            $this->session->set_userdata("redirect", base_url("order"));
            redirect(base_url()."login");
        }
        $infoUser = $this->logged_in();
        if(!empty($infoUser)) {
            $this->_user_id = $infoUser['id'];
        }

        $this->load->helper("url");
        $this->load->model("member_model");
        $this->load->model("products_model",'products');
        $this->load->model("order_model");
        $this->load->library("form_validation");
        $this->load->library('senpay_checkout');
        $this->load->helper('phpmailer');
    }

    //create a new user
    function index() {
        
        if($this->cart->total_items() <= 0) {
            redirect(base_url());
        }
        
        //load the registration helper under helper folder
        $this->load->helper('registration');
        $this->data['title'] = "Register User";

        // validate form input  
        $this->form_validation->set_rules('fullname', 'Họ và Tên', 'required|xss_clean');
        $this->form_validation->set_rules('birth_date_year', 'Năm', 'xss_clean');
        $this->form_validation->set_rules('birth_date__nc_month', 'Tháng', 'xss_clean');
        $this->form_validation->set_rules('birth_date__nc_day', 'Ngày', 'xss_clean');
        $this->form_validation->set_rules('address', 'Địa chỉ', 'required|xss_clean');
        $this->form_validation->set_rules('city', 'Tỉnh/Thành phố', 'required|xss_clean');
        $this->form_validation->set_rules('state', 'Quận/Huyện', 'required|xss_clean');
        $this->form_validation->set_rules('ward', 'Phường/Xã', 'required|xss_clean');
        $this->form_validation->set_rules('phone', 'Điện thoại', 'required|xss_clean');
        $this->form_validation->set_rules('email', 'Địa chỉ email', 'required|valid_email');
        
        $infoUser = $this->member_model->get_member($this->_user_id);
        $data = $this->_getData($infoUser, $_POST);

        if ($this->form_validation->run() == true) {
            $this->member_model->save($data, $this->_user_id);
            $this->data['message'] = "Thông tin của bạn đã được lưu lại";
        } else {
            //display the create user form
            //set the flash data error message if there is one
            $this->data['message'] = (validation_errors() ? validation_errors() : ($this->session->flashdata('message')));

            $this->data['fullname'] = array(
                'name' => 'fullname',
                'id' => 'fullname',
                'type' => 'text',
                'size' => 32,
                'maxlength' => 32,
                'value' => $data['fullname'],
            );

            $this->data['address'] = array(
                'name' => 'address',
                'id' => 'address',
                'type' => 'text',
                'size' => 32,
                'maxlength' => 64,
                'value' => $data['address'],
            );

            $this->data['city'] = buildCityDropdown('city', $data['city_id']);
            
            $this->data['state'] = buildStateDropdown('state', $data['district_id'], $data['city_id']);
            
            $this->data['ward'] = buildWardDropdown('ward', $data['ward_id'], $data['district_id']);
            
            $this->data['phone'] = array(
                'name' => 'phone',
                'id' => 'phone',
                'type' => 'text',
                'size' => 32,
                'maxlength' => 32,
                'value' => $data['phone'],
            );
            
            $this->data['email'] = array(
                'name' => 'email',
                'id' => 'email',
                'type' => 'text',
                'size' => 32,
                'maxlength' => 128,
                'value' => $data['email'],
            );
            
            $this->data['password'] = array(
                'name' => 'password',
                'id' => 'password',
                'type' => 'password',
                'size' => 32,
                'maxlength' => 32,
                'value' => $this->form_validation->set_value('password'),
            );
            
            $this->data['password_confirm'] = array(
                'name' => 'password_confirm',
                'id' => 'password_confirm',
                'type' => 'password',
                'size' => 32,
                'maxlength' => 32,
                'value' => $this->form_validation->set_value('password_confirm'),
            );
            
            $this->data['thongtindonhang'] = $this->_getInfoCart(false);
            $this->data['pageTitle']= "ngoinhabeyeu.com ";
            $this->_templates['page'] = 'order/index';
            $this->site_lib->load($this->_templates['page'], $this->data);
        }
    }
    
    public function update() {
        //load the registration helper under helper folder
        $this->load->helper('registration');
        $this->data['title'] = "Register User";

        // validate form input  
        $this->form_validation->set_rules('fullname', 'Họ và Tên', 'required|xss_clean');
        $this->form_validation->set_rules('address', 'Địa chỉ', 'required|xss_clean');
        $this->form_validation->set_rules('city', 'Tỉnh/Thành phố', 'required|xss_clean');
        $this->form_validation->set_rules('state', 'Quận/Huyện', 'xss_clean');
        $this->form_validation->set_rules('phone', 'Điện thoại', 'required|xss_clean');
        $infoUser = $this->member_model->get_member($this->_user_id);
        $data = $this->_getData($infoUser, $_POST);
        $cartInfo = $this->cart->contents();

        $dataCart = $this->_getDataCart($cartInfo);
        $json = array();
        if ($this->form_validation->run() == true) {
            $data['dt_create'] = date("Y-m-d");
            $data['note'] = $this->input->post('note');
            // Update number product...
            foreach($dataCart as $item) {
                $remainingAmount = $this->products->getSoluongFromId($item['product_id'])-$item['quantity'];
                if($remainingAmount<=0) {
                    $remainingAmount = 0;
                }
                $this->products->update_soluong($item['product_id'], $remainingAmount);
            }
            $orderId = $this->order_model->save($data, $dataCart);
			
            $json['status'] = true;

            if($data['method'] == 2) {

                //Test  
                //Khai báo url nhận kết quả trả về 
                $return_url="http://ngoinhabeyeu.com/order/finishsendpay";

                //Giá của cả giỏ hàng 
                $price = $this->_getTotalPrice($cartInfo);

                //Mã giỏ hàng 
                $order_code = $orderId;
                
                //Thông tin giao dịch
                $transaction_info = "Thông tin mô tả giao dich";
                
                //Khai báo đối tượng của lớp SenPay_Checkout
                $SenPay= new SenPay_Checkout();
                
                //Tạo link thanh toán đến SenPay.vn
                $json['redirect'] = $SenPay->buildCheckoutUrl($return_url, $transaction_info,  $order_code, $price);
                
            } else {
                
                //gửi email đơn hàng cho khách
                /**** thông tin khách hang ***/
                $subject = "Đặt hàng thành công";
                $data_mail['fullname'] = $data['fullname'];
                $data_mail['address'] = $data['address'];
                $data_mail['phone'] = $data['phone'];
                $data_mail['email'] = $data['email'];
                
                /*** thông tin san phâm ***/
                $data_mail['productsObjects'] = array();
                foreach($dataCart as $cart_item){
                    $product_item = $this->products->getProductFromId($cart_item['product_id']);
                    $product_item->quantity = $cart_item['quantity'];
                    $data_mail['productsObjects'][]=$product_item;
                }
                
                $message = $this->load->view('emails/vn/order_finish_email',$data_mail,true);
				$rs_email= send_email($this->config->item('admin_email'),$data_mail['email'] ,$this->config->item('contact_email'), $subject, $message);
                
                //gửi email đơn hàng cho admin
                $subject = "Thông tin đơn hàng mới";
                $data_mail['fullname'] = $data['fullname'];
                $data_mail['address']= $data['address'];
                $data_mail['phone'] = $data['phone'];
                $data_mail['email'] = $data['email'];
                $message = $this->load->view('emails/vn/order_finish_email',$data_mail,true);
                $rs_email= send_email($data_mail['email'] ,$this->config->item('admin_email'),$data_mail['email'] , $subject, $message);
                //end mail
                
                $json['redirect'] = base_url("order/finish/{$orderId}");
                
            }
			
        } else {
            $json['status'] = false;
            $json['message'] = "Không thể lưu những thay đổi";  
        }
        echo json_encode($json);
        exit();
    }
    
    public function finish($orderid = 0) {

        $data['orderItem']= $this->order_model->getOrderFromId($orderid);
        // danh sách sản phẩm trong gio hang 
        $data['pageTitle']= "Đặt hàng thành công - ngoinhabeyeu.com bán deal giá rẻ,giảm giá tại tphcm với chất lượng cam kết";
        
        // Empty cart
        $this->cart->destroy();
        
        $this->_templates['page'] = 'order/finish';
        $this->site_lib->load($this->_templates['page'], $data);
    }
    
    public function finishsendpay() {

        $transaction_info = $this->input->get("transaction_info");
        $order_code = $this->input->get("order_code");
        $payment_id = $this->input->get("payment_id");
        $payment_type = $this->input->get("payment_type");
        $secure_code = $this->input->get("secure_code");
        $price = $this->input->get("price");
        $error_code = $this->input->get("error_code");
        $error_text = $this->input->get("error_text");
        if($error_code == 0) {
            // danh sách sản phẩm trong gio hang 
            $this->_data['pageTitle']= "Đặt hàng thành công - ngoinhabeyeu.com bán deal giá rẻ, giảm giá tại tphcm với chất lượng cam kết";
            $check= $this->senpay_checkout->verifyPaymentUrl_Success($transaction_info, $order_code, $price, $payment_id, $payment_type, $error_code, $secure_code);
            if($check) {
                $template = 'order/finishsendpay';
                // Empty cart
                $this->cart->destroy();
            } else {
                // danh sách sản phẩm trong gio hang 
                $this->_data['pageTitle']= "Đặt hàng không thành công - ngoinhabeyeu.com bán deal giá rẻ, giảm giá tại tphcm với chất lượng cam kết";
                $template = 'order/errorsendpay';
            }
        } else {
            // danh sách sản phẩm trong gio hang 
            $this->_data['error_text'] = $error_text;
            $this->_data['pageTitle'] = "Đặt hàng không thành công - ngoinhabeyeu.com bán deal giá rẻ, giảm giá tại tphcm với chất lượng cam kết";
            $template = 'order/errorsendpay';
        }
        
        $this->_data['error_code'] = $error_code;
        $this->site_lib->load($template, $this->_data);
    }

    private function _getData($data, $post) {
        $result = array();
        $result['fullname'] = !empty($post['fullname'])?$post['fullname']:$data['lb_full_name'];
        $result['address'] = !empty($post['address'])?$post['address']:$data['lb_address'];
        $result['city_id'] = !empty($post['city'])?$post['city']:$data['lb_city'];
        $result['district_id'] = !empty($post['state'])?$post['state']:$data['lb_state'];
        $result['ward_id'] = !empty($post['ward'])?$post['ward']:$data['lb_ward'];
        $result['phone'] = !empty($post['phone'])?$post['phone']:$data['lb_phone'];
        $result['email'] = !empty($post['email'])?$post['email']:$data['lb_email'];
        $result['method'] = !empty($post['method'])?$post['method']:1;
        return $result;
    }
    
    private function _getDataCart($data) {
        $result = array();
        foreach($data as $key=>$item) {
            $result[$key]['product_id'] = !empty($item['id'])?$item['id']:0;
            $result[$key]['quantity'] = !empty($item['qty'])?$item['qty']:1;
            $result[$key]['price'] = !empty($item['price'])?$item['price']:0;
            $result[$key]['color'] = !empty($item['option']['color'])?$item['option']['color']:0;
            $result[$key]['size'] = !empty($item['option']['size'])?$item['option']['size']:0;
            $result[$key]['total'] = $result[$key]['quantity']*$result[$key]['price'];
        }
        return $result;       
    }
    
    private function _getTotalPrice($data) {
        $totalPrice = 0;
        foreach($data as $key=>$item) {
            $quantity = !empty($item['qty'])?$item['qty']:1;
            $price = !empty($item['price'])?$item['price']:0;
            $totalPrice += $quantity*$price;

        }
        return $totalPrice;       
    }
    
    public function get_state() {
        $cityId = $this->input->post("city_id");
        $this->load->helper('registration');
        $json = array();
        $json['status'] = true;
        $json['data'] = buildStateDropdown('state', '', $cityId);
        echo json_encode($json);
        exit();
    }

}